import java.util.Arrays;
import java.util.Scanner;

public class TestDemo {
    public static void swap(int[] array){
        int temp=array[0];
        array[0]=array[1];
        array[1]=temp;
    }
    public static void main(String[] args) {
        int[] array={10,20};
        print(array);
        swap(array);
        print(array);
    }
    public static void print(int[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    public static void change(int[] array){
        for(int i=0;i< array.length;i++){
            array[i]=array[i]*2;
        }
    }
    public static void main15(String[] args) {
        int[] arr={1,2,3,4};
        print(arr);//1 2 3 4
        change(arr);//扩大2倍
        print(arr);//2 4 6 8

    }
    public static void main14(String[] args) {
        int[] arr={1,2,3,4};
        String ret= Arrays.toString(arr);
        System.out.println(ret);//[1, 2, 3, 4]
    }
    public static void main13(String[] args) {
        int[] arr={1,2,3,4};
        for(int x:arr){
            System.out.print(x);//1 2 3 4
        }
        System.out.println();
    }
    //汉诺塔问题
    /**
     *
     * @param n 盘子的个数
     * @param pos1 起始位置
     * @param pos2 中间位置
     * @param pos3 目的位置
     */
    public static void hanio(int n,char pos1,char pos2,char pos3){
        if(n == 1){
            move(pos1,pos3);
        }else {
            hanio(n-1,pos1,pos3,pos2);
            move(pos1,pos3);
            hanio(n-1,pos2,pos1,pos3);
        }

    }
    /**
     *
     * @param pos1 起始位置
     * @param pos2 目的位置
     */
    public static void move(char pos1,char pos2){
        System.out.print(pos1+" -> "+pos2+" ");
    }

    public static void main12(String[] args) {
        hanio(1,'A','B','C');
        System.out.println();
        hanio(2,'A','B','C');
        System.out.println();
        hanio(3,'A','B','C');
    }
    //写一个函数，递归返回组成的他的数字之和
    public static int add2(int n){
        if(n>=10){
            return add2(n/10)+n%10;
        }
        return n%10;
    }
    public static int add3(int n){
        if(n<10){
            return n%10;
        }
        return (n%10)+add3(n/10);
    }
    public static void main11(String[] args) {
        System.out.println(add2(10));
        System.out.println(add3(10));
    }
    public static int fib2(int n){
        if(n==1 || n==2){
            return 1;
        }
        return fib2(n-1) + fib2(n-2);
    }
    public static void main10(String[] args) {
        //斐波那契数列的第n项
        System.out.println(fib2(8));
    }
    //求1+2+。。。+n
    public static int add(int n){
        if(n==1){
            return 1;
        }
        return n+add(n-1);
    }
    public static void main9(String[] args) {
        System.out.println(add(10));
    }
    //顺序打印一个数的每一位
    public static void print(int n){
        if(n<10){
            System.out.println(n);
            return;
        }
        print(n/10);
        System.out.println(n%10);
    }
    public static void print2(int n){
        if(n>9){
            print2(n/10);
        }
        System.out.println(n%10);;
    }
    public static void main8(String[] args) {
        print(123);
        print2(456);
    }
    //递归求n的阶乘
    public static int fac(int n){
        if(n==1){
            return 1;
        }
        return n*fac(n-1);
    }
    public static void main7(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        System.out.println(fac(n));
    }
    public static int sum(int... array){
        int sum=0;
        for (int x:array) {
            sum+=x;
        }
        return sum;
    }
    public static void main6(String[] args) {
        int ret=sum(1,2,3,4,5,6,7);
        System.out.println(ret);
        int ret2=sum(1,2,3,4,5,6,7,8,9,10);
        System.out.println(ret2);
    }
    public static int fib(int n){
        int f1=1;
        int f2=1;
        int f3=1;
        for(int i=3;i<=n;i++){
            f3=f1+f2;
            f1=f2;
            f2=f3;
        }
        return f3;
    }
    public static void main5(String[] args) {
        //求斐波那契数
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        System.out.println(fib(n));

    }
    public static void main4(String[] args) {
        int[] arr={1,2,3,3,1};
        int ret=1;
        for(int i=0;i<arr.length;i++){
            ret^=arr[i];
        }
        System.out.println(ret);
    }
    public static void func(int a){
        a=200;
        System.out.println(a);//200
    }
    public static void main3(String[] args) {
        int a=10;
        func(a);
        System.out.println(a);//10
    }
    //打印X图形
    public static void main2(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextInt()){
            int n=sc.nextInt();
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    if(i==j || (i+j)==(n-1)){
                        System.out.print("*");
                    }else{
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }

        }
    }
    public static void main1(String[] args) {
        //获取一个数二进制序列的偶数位和奇数位，分别输出二进制序列
        //偶数位 从左往右 第二位是偶数位
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        String evenStr="";
        for(int i=31;i>=1;i-=2){
            evenStr+=(n>>>i)&1;
        }
        System.out.println(evenStr);
        //奇数位
        String oddStr="";
        for(int i=30;i>=0;i-=2){
            oddStr+=(n>>>i)&1;
        }
        System.out.println(oddStr);
    }
}
